#include "../game.h"
#include "torn.h"

/*---------------------------------

Torn::Torn( bool spelare, short x, short y )
virtual
Konstruktor, sätter bild och typ

---------------------------------*/

Torn::Torn( bool spelare, short x, short y ) : Pjas(spelare, x, y) {
    bild = video.loadImage( spelare == VIT ? "vit_torn.bmp" : "svart_torn.bmp" );
    typ = TORN;
}

/*---------------------------------

Torn::mojligtDrag( short x, short y )
overloaded virtual
Detta är lite fulhackat för att låta damen
kastas till Torn och köra tornets mojligtDrag
(se funktionen md nedan)
Argument: positionen x,y

---------------------------------*/

bool Torn::mojligtDrag( short x, short y ) {
    return md( x, y );
}

/*---------------------------------

Torn::md( short x, short y )
Som en vanlig moojligtDrag;
kollar om tornet kan gå till x,y
Argument: positionen x,y

---------------------------------*/

bool Torn::md( short x, short y ) {

	// Om det finns en pjäs på x,y och den är av samma spelare som this, kan den inte gå dit
    if( game->pjasArray[x][y] != NULL && game->pjasArray[x][y]->spelare == spelare) {
        return 0;
    }

	// Gå nedåt på brädet. Står en pjäs i vägen? I så fall, kan vi inte gå dit.
    if( x == xpos && y > ypos ) {
        for( int i = ypos; i < y; i++ ) {
            if( game->pjasArray[x][i] != NULL && game->pjasArray[x][i] != this ) {
                return 0;
            }
        }
        // Annars kan vi gå dit.
        return 1;
    }
    // Gå uppåt på brädet. Står en pjäs i vägen? I så fall, kan vi inte gå dit.
    if( x == xpos && y < ypos ) {
        for( int i = ypos; i > y; i-- ) {
            if( game->pjasArray[x][i] != NULL && game->pjasArray[x][i] != this ) {
                return 0;
            }
        }
        return 1;
    }
    // Gå till höger på brädet. Står en pjäs i vägen? I så fall, kan vi inte gå dit.
    if( y == ypos && x > xpos ) {
        for( int i = xpos; i < x; i++ ) {
            if( game->pjasArray[i][y] != NULL && game->pjasArray[i][y] != this ) {
                return 0;
            }
        }
        return 1;
    }
    // Gå till vänster på brädet. Står en pjäs i vägen? I så fall, kan vi inte gå dit.
    if( y == ypos && x < xpos ) {
        for( int i = xpos; i > x; i-- ) {
            if( game->pjasArray[i][y] != NULL && game->pjasArray[i][y] != this ) {
                return 0;
            }
        }
        return 1;
    }
    return 0;
}
